<?php
/**
 * 小程序
 */
namespace app\index\controller\applets;
use think\Request;
use app\index\controller\applets\AppletsBase;
use app\index\validate\applets\IndexValidate;
use app\index\model\Applets;

class MiniProgram extends AppletsBase{


    public function __construct() {


    }

    /**
     * 获取小程序信息
     * @param  Request $appId [appId]
     * @return [array]         [数组]
     */
	public function getminiprograminfo(Request $input){
		$result=Applets::queryMiniProgramInfo($input->appId);
		if(!$result){
			return $this->return_err();
		}
		return $this->return_msg($result);
	}

    /**
     * 下载小程序源码
     * @param  Request $appId [appId]
     * @return [array]         [数组]
     */
	public function downsource(Request $input){
		// http://local.mp.cn/app/downminiapppackage/123

		// 文件路径
		$file_path = getcwd()."/sourcePackages/".$input->appId.".zip";

		// 获取文件名
    	$filename = basename($file_path);

	    // 设置响应头
	    header('Content-Description: File Transfer');
	    header('Content-Type: application/octet-stream'); // 通用二进制流类型
	    header('Content-Disposition: attachment; filename="' . basename($file_path) . '"');
	    // header('Expires: 0');
	    header('Cache-Control: must-revalidate');
	    header('Pragma: public');
	    header('Content-Length: ' . filesize($file_path));
	    
	    // 读取并输出文件内容
	    readfile($file_path);
	    exit;

		/*return $this->return_msg([
			"file"=>"http://local.mp.cn/sourcePackages/".$input->appId.".jpg"
		]);*/
	}

    /**
     * 上传提交小程序源码
     * @param  Request $appId [appId]
     * @return [array]         [数组]
     */
	public function commitsource(Request $input){
		$windowWidth = $input->param('windowWidth', 400);
		$windowHeight = $input->param('windowHeight', 600);
		$entryPath = $input->param('entryPath', 600);
        // 获取表单上传文件
        $file = $input->file('file');

        // 验证文件是否上传成功
        if (empty($file)) {
        	return $this->return_err();
        }
        /*if (!$file->checkExt(['jpg', 'jpeg', 'png', 'gif'])) {
		    return json(['status' => 'error', 'message' => '不允许的文件类型']);
		}

		if (!$file->checkSize(5 * 1024 * 1024)) {
		    return json(['status' => 'error', 'message' => '文件太大']);
		}*/
 
 		$filePath=getcwd() . '/sourcePackages';
        // 移动到框架应用根目录/sourcePackages/ 目录下
        $info = $file->move($filePath,'');
        if (!$info) {
        	return $this->return_error();
        }

        /*// 创建 ZipArchive 实例
		$zip = new \ZipArchive();
		// 打开 ZIP 文件
		if ($zip->open($filePath.'/'.$info->getFilename()) === TRUE) {
		    // 解压 ZIP 文件到指定目录
		    $zip->extractTo($filePath);
		    $zip->close();
		    echo "ZIP 文件解压成功！";
		} else {
		    echo "无法打开 ZIP 文件。";
		}*/

		$data=["window_width"=>$windowWidth,"window_height"=>$windowHeight,"path"=>$entryPath];


		//修改小程序窗口大小
		$result=Applets::updateMiniProgramWindowSize(["appId"=>$input->appId],$data);
        return $this->return_msg($data);

        /*dump($_FILES["file"]);
		$target_dir = "./public/sourcePackages/"; // 目标目录
        move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
        return $this->return_msg();*/
	}

	/**
	 * 小程序登录获取logincode
	 * 使用后就不能用了（有效期五分钟）
	 * @param  Request appid   [小程序 appId]
	 * @param  Request secret  [小程序 appSecret]
	 * @param  Request js_code [登录时获取的 code，可通过wx.login获取]
	 * @param  Request grant_type [授权类型，此处只需填写 authorization_code]
	 * @return [array]         [数组]
	 */
	public function logincode(Request $input){
		(new IndexValidate())->scene("logincode")->goCheck();
		$code="mp_".$input->appid.$this->generateUuid();

		return $this->return_msg([
			"code"=>$code,
		]);
	}
	/**
	 * 小程序登录获取openid
	 * @param  Request appid   [小程序 appId]
	 * @param  Request secret  [小程序 appSecret]
	 * @param  Request js_code [登录时获取的 code，可通过wx.login获取]
	 * @param  Request grant_type [授权类型，此处只需填写 authorization_code]
	 * @return [array]         [数组]
	 */
	public function jscode2session(Request $input){
		(new IndexValidate())->scene("jscode2session")->goCheck();
		$openid="mp_".$input->appid.$this->generateUuid();

		return $this->return_msg([
			"openid"=>$openid,
			"session_key"=>"",
		]);
	}







}
